package com.group3.hospital.shiro;

import org.apache.shiro.crypto.SecureRandomNumberGenerator;
import org.apache.shiro.crypto.hash.SimpleHash;

/**
 * @author 丰哥
 * 2021/12/29
 *
 *  Shiro加密常问的问题：
 *    1. md5： md5是一种不可逆的加密方式，但是可以通过穷举法暴力破解。工作：将明文字符串->密文字符串
 *    2. 盐salt：密码可以根据不同的盐生成不同的密码
 *    3. 散列次数：shiro通过加不同次数的盐，达到进一步加密的效果
 *
 *
 * Shiro加密工具类
 */
public class ShiroUtils {

    // 加密算法
    public static final String ALGORITH_NAME = "MD5";

    // 散列次数
    public static final int HASH_ITERATIONS = 1024;

    /**
     * 生成盐
     * @return
     */
    public static String createSalt() {
        return new SecureRandomNumberGenerator().nextBytes().toString();
    }


    /**
     * 根据盐对密码加密
     * @param pwd
     * @param salt
     * @return
     */
    public static String createPassword(String pwd, String salt) {
        return new SimpleHash(ALGORITH_NAME, pwd, salt, HASH_ITERATIONS).toString();
    }

}
